using System;
using System.Collections.Generic;
using EntitiesAndMappings.Entities;
using NHibernate.Criterion;
using NHibernate.SqlCommand;

namespace ProyectoActivos.Daos
{
    public class IngresoDAO : BaseDAO<Ingreso>
    {
        public IList<Ingreso> Buscar(Ingreso ingreso)
        {
            IList<Ingreso> lista;
            using (var session = CreateSessionFactory().OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    var criteria = session.CreateCriteria<Ingreso>();
                    if (!ingreso.Fecha.Equals(DateTime.MinValue))
                    {
                        var fechaInicio = new DateTime(ingreso.Fecha.Year, ingreso.Fecha.Month, 1);
                        var fechaFin = new DateTime(ingreso.Fecha.Year, ingreso.Fecha.Month, DateTime.DaysInMonth(ingreso.Fecha.Year, ingreso.Fecha.Month));
                        criteria.Add(Restrictions.Between("Fecha", fechaInicio, fechaFin));
                    }
                    if (!string.IsNullOrEmpty(ingreso.NumeroFactura))
                    {
                        criteria.Add(Restrictions.Like("NumeroFactura", ingreso.NumeroFactura+"%"));
                    }
                    if (!string.IsNullOrEmpty(ingreso.NumeroGuia))
                    {
                        criteria.Add(Restrictions.Like("NumeroGuia", ingreso.NumeroGuia + "%"));
                    }
                    if (ingreso.Almacen != null)
                    {
                        criteria.CreateAlias("Almacen", "Almacen", JoinType.InnerJoin);
                        criteria.Add(Restrictions.Eq("Almacen.Id", ingreso.Almacen.Id));
                    }
                    lista = criteria.List<Ingreso>();
                    transaction.Commit();
                }
            }
            return lista;
        }
    }
}